// 函数柯里化: 把接受多个参数的函数转换成接受一个单一参数的函数
/**
 * 主要思路是：要判断当前传入函数的参数个数（args.length）是否大于等于原函数所需参数个数（fn.length）
 *  如果是，则执行当前函数；如果小于，则返回一个函数
 * 
 * 
 * 
 * 回顾：
 *  函数有name length prototype属性
 * **/


function curry(fn, ...args) {
    return function() {
        args = [...args, ...arguments];

        if (args.length < fn.length) {
            return curry(fn, ...args);
        } else {
            return fn.apply(null, args);
        }
    };
};


function add(a,b,c) {
    return a + b + c;
};


const f = curry(add);


console.log(f(1)(2,3));


